package Day_0130;

/**
 * @author zxc
 * @date 2023/01/30 16:06
 **/
// 重载 && 重写
public class OverrideAndOverload {
    public static void main(String[] args) {
        Son son = new Son();
        son.sayHello();
        Father father = new Father();
        father.sayHello();
        father.sayHello("zxc");
    }
    public static class Father {
        public void sayHello() {
            System.out.println("Hello");
        }

        /**
         * 重载的概念 ：
         * 在一个类中，同名的方法如果有不同的参数列表（参数类型不同、参数个数不同甚至是参数顺序不同）则视为重载。
         * 注意 ：重载对返回类型没有要求，可以相同也可以不同，但不能通过返回类型是否相同来判断重载。
         *
         * 重载的特点 ：
         * 1.重载Overload是一个类中多态性的一种表现;
         * 2.重载要求同名方法的参数列表不同(参数类型，参数个数甚至是参数顺序);
         * 3.重载的时候，返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准;
         */
        public void sayHello(String name) {
            System.out.println("Hello" + " " + name);
        }
    }
    static class Son extends Father{
        /**
         * 重写的概念 ：
         * 由于子类继承了父类的全部方法，但是有时候子类并不想去使用父类原本的方法，重写父类继承的方法;
         * 重写特点 ：
         * （1）发生在父类和子类之间;
         * （2）方法名，参数列表，返回类型（除过子类中方法的返回类型是父类中返回类型的子类）必须相同
         * （3）访问修饰符的限制一定要大于被重写方法的访问修饰符（public>protected>default>private)
         * （4）重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常
         */
        @Override
        public void sayHello() {
            // TODO Auto-generated method stub
            System.out.println("hello by ");
        }
    }
}
